package leetcode.method.pointer;

/**
 * 常用范围：
 *
 * 大写字母（A-Z）：65 （A）~ 90（Z）
 * 小写字母（a-z）：97（a） ~ 122（z）
 * 字符数字（'0' ~ '9'）：48（'0'） ~ 57（'9'）
 */
public class Program125StringPalindrome {

    public Program125StringPalindrome() {

    }

    public boolean isPalindrome(String s) {
        if (s.length() < 2) {
            return true;
        }
        String lowerCase = s.toLowerCase();
        int left = 0;
        int right = s.length() - 1;
        char[] charArray = lowerCase.toCharArray();
        while (left < right) {
            while (left < right && !checkChar(charArray[left])) {
                left++;
            }
            while (left < right && !checkChar(charArray[right])) {
                right--;
            }
            if (left >= right) {
                return true;
            }
            if (charArray[left] != charArray[right]) {
                return false;
            }
            left++;
            right--;
        }
        return true;
    }

    private boolean checkChar(char ch) {
        return ch >= 48 && ch <= 57 || ch >= 97 && ch <= 122;
    }

    public static void main(String[] args) {
        Program125StringPalindrome obj = new Program125StringPalindrome();
//        System.out.println(obj.isPalindrome("A man, a plan, a canal: Panama"));
//        System.out.println(obj.isPalindrome("race a car"));
//        System.out.println(obj.isPalindrome(" "));
        System.out.println(obj.isPalindrome(".,"));
        System.out.println(obj.isPalindrome("0P"));
    }
}
